﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI;
using System.Web.UI.WebControls;
using PortalCurriculo.Domain;
using PortalCurriculo.WebUI.Helpers;

namespace PortalCurriculo.WebUI.Selecionadores
{
    public partial class CadastroVaga : RecruiterAccessHelper
    {
        private static List<VagaIdioma> VagaIdiomas { get; set; }
        private static List<Evento> Eventos { get; set; }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack) return;

            PreencherTela();
        }

        private void PreencherTela()
        {
            Selecionador selecionador = SelecionadorLogado;
            txtSelecionador.Text = selecionador.Usuario.Pessoa.PessoaFisica.NomeCompleto;

            PreencherEmpresas();
            PreencherFormaContratacao();
            PreencherArea();
            PreencherIdioma();
            PreencherNivel();
            PreencherTipoEvento();
        }

        private void PreencherEmpresas()
        {
            var empresas =
                (from empresa in
                     (List<Empresa>) SessionHelper.Session(SessionHelper.SessionName.EmpresasSelecionadorLogado)
                 select new
                            {
                                empresa.Id,
                                Descricao = empresa.Usuario.Pessoa.PessoaJuridica.NomeFantasia
                            });

            WebHelper.FillDropDownList(ddlEmpresa, empresas, false);
        }

        private void PreencherArea()
        {
            List<Area> areas = new Area().SelecionarAtivos();
            WebHelper.FillDropDownList(ddlArea, areas, true);
        }

        private void PreencherTipoEvento()
        {
            List<TipoEvento> tipoEventos = new TipoEvento().SelecionarAtivos();
            WebHelper.FillDropDownList(ddlTipoEvento, tipoEventos, true);
        }

        private void PreencherIdioma()
        {
            List<Idioma> idiomas = new Idioma().SelecionarAtivos();
            WebHelper.FillDropDownList(ddlIdioma, idiomas, true);

            ddlIdioma.Items.Add(new ListItem("Outro", "-2"));
        }

        private void PreencherNivel()
        {
            var niveis = (from nivel in new Nivel().SelecionarAtivos()
                          select new
                                     {
                                         nivel.Id,
                                         Descricao = nivel.Nome
                                     });
            WebHelper.FillDropDownList(ddlNivel, niveis, true);
        }

        private void PreencherFormaContratacao()
        {
            List<FormaContratacao> formaContratacoes = new FormaContratacao().SelecionarAtivos();
            WebHelper.FillDropDownList(ddlFormaContratacao, formaContratacoes, false);
        }

        private void PreencherEspecializacaoArea()
        {
            if (ddlArea.SelectedValue.Equals("-1")) return;

            //var especializacaoAreas = new EspecializacaoArea().SelecionadorPorArea(int.Parse(ddlArea.SelectedValue));
            //WebHelper.FillDropDownList(ddlEspecializacaoArea, especializacaoAreas, true);
        }

        private void PreencherCargo()
        {
            if (ddlEspecializacaoArea.SelectedValue.Equals("-1")) return;

            //var cargos = new Cargo().SelecionarPorEspecializacao(int.Parse(ddlEspecializacaoArea.SelectedValue));
            //WebHelper.FillDropDownList(ddlCargo, cargos, true);
        }

        protected void ddlArea_SelectedIndexChanged(object sender, EventArgs e)
        {
            PreencherEspecializacaoArea();
        }

        protected void ddlEspecializacaoArea_SelectedIndexChanged(object sender, EventArgs e)
        {
            PreencherCargo();
        }

        protected void chkLocalizacao_CheckedChanged(object sender, EventArgs e)
        {
            pnlLocalizacao.Visible = !chkLocalizacao.Checked;
        }

        protected void ddlIdioma_SeletedIndexChanged(object sender, EventArgs e)
        {
            txtOutroIdioma.Visible = ddlIdioma.SelectedValue == "-2";
            lblOutro.Visible = ddlIdioma.SelectedValue == "-2";
        }

        protected void lsvIdioma_ItemDataBound(object sender, ListViewItemEventArgs e)
        {
            var item = (ListViewDataItem) e.Item;
            var vagaIdioma = (VagaIdioma) item.DataItem;

            var idioma = (Label) item.FindControl("lblIdioma");
            var tipo = (Label) item.FindControl("lblTipo");
            var nivel = (Label) item.FindControl("lblNivel");
            var excluir = (ImageButton) item.FindControl("imbExcluir");

            idioma.Text = vagaIdioma.Idioma.Id == -2 ? vagaIdioma.Outro : vagaIdioma.Idioma.Descricao;
            nivel.Text = vagaIdioma.Nivel.Nome;
            tipo.Text = vagaIdioma.Imprescindivel.ToString();
            excluir.Attributes.Add("Id", vagaIdioma.Id.ToString());

            if (vagaIdioma.Id != 0) return;

            idioma.Attributes.Add("Id", vagaIdioma.Idioma.Id.ToString());
            nivel.Attributes.Add("Id", vagaIdioma.Nivel.Id.ToString());
        }

        protected void lnkAdicionarIdioma_Click(object sender, EventArgs e)
        {
            if (!Page.IsValid) return;

            if (VagaIdiomas == null) VagaIdiomas = new List<VagaIdioma>();

            var vagaIdioma = new VagaIdioma
                                 {
                                     Idioma = new Idioma
                                                  {
                                                      Id = int.Parse(ddlIdioma.SelectedValue),
                                                      Descricao = ddlIdioma.SelectedItem.Text
                                                  },
                                     Outro = txtOutroIdioma.Text,
                                     Imprescindivel = bool.Parse(ddlTipo.SelectedValue),
                                     Nivel = new Nivel
                                                 {
                                                     Id = int.Parse(ddlNivel.SelectedValue),
                                                     Nome = ddlNivel.SelectedItem.Text
                                                 }
                                 };

            VagaIdiomas.Add(vagaIdioma);

            txtOutroIdioma.Text = string.Empty;
            ddlTipo.SelectedIndex = 0;
            ddlNivel.SelectedIndex = 0;
            ddlIdioma.SelectedIndex = 0;

            lsvIdioma.DataSource = VagaIdiomas;
            lsvIdioma.DataBind();

            WebHelper.ShowMessageBox("Idioma incluído com sucesso!", ref updVaga);

            ddlIdioma.Focus();
        }

        protected void imbExcluir_Click(object sender, ImageClickEventArgs e)
        {
            int id = int.Parse(((ImageButton) sender).Attributes["Id"]);

            VagaIdioma vagaIdioma = (from vagaIdiomaLinq in VagaIdiomas
                                     where vagaIdiomaLinq.Id == id
                                     select vagaIdiomaLinq).FirstOrDefault();

            VagaIdiomas.Remove(vagaIdioma);

            lsvIdioma.DataSource = VagaIdiomas;
            lsvIdioma.DataBind();
        }

        protected void imbExcluirEvento_Click(object sender, ImageClickEventArgs e)
        {
            int id = int.Parse(((ImageButton) sender).Attributes["Id"]);

            Evento evento = (from eventoLinq in Eventos
                             where eventoLinq.Id == id
                             select eventoLinq).FirstOrDefault();

            Eventos.Remove(evento);

            lsvEvento.DataSource = Eventos;
            lsvEvento.DataBind();
        }

        protected void lsvEvento_ItemDataBound(object sender, ListViewItemEventArgs e)
        {
            var item = (ListViewDataItem) e.Item;
            var evento = (Evento) item.DataItem;

            var tipoEvento = (Label) item.FindControl("lblTipoEvento");
            var tempo = (Label) item.FindControl("lblTempo");
            var maximoProfissionais = (Label) item.FindControl("lblMaximoProfissionais");
            var excluir = (ImageButton) item.FindControl("imbExcluirEvento");

            tipoEvento.Text = evento.TipoEvento.Descricao;
            tipoEvento.Attributes.Add("Descricao", evento.Descricao);
            tipoEvento.Attributes.Add("Ordem", evento.Ordem.ToString());
            tempo.Text = evento.Duracao.ToString();
            maximoProfissionais.Text = evento.MaximoProfissionais.ToString();
            excluir.Attributes.Add("Id", evento.Id.ToString());

            if (evento.Id != 0) return;
            tipoEvento.Attributes.Add("Id", evento.TipoEvento.Id.ToString());
        }

        protected void lnkAdicionarEvento_Click(object sender, EventArgs e)
        {
            if (!Page.IsValid) return;

            if (Eventos == null) Eventos = new List<Evento>();

            var evento = new Evento
                             {
                                 TipoEvento = new TipoEvento
                                                  {
                                                      Id = int.Parse(ddlTipoEvento.SelectedValue),
                                                      Descricao = ddlTipoEvento.SelectedItem.Text
                                                  },
                                 MaximoProfissionais =
                                     chkMultiplosProfissionais.Checked == false
                                         ? 1
                                         : int.Parse(txtMaximoProfissionais.Text),
                                 Duracao = int.Parse(ddlTempoEntrevista.SelectedItem.Value),
                                 Ativo = true,
                                 Descricao = txtDescricaoEvento.Text,
                             };

            Eventos.Add(evento);

            txtDescricao.Text = string.Empty;
            ddlTipoEvento.SelectedIndex = 0;
            ddlTempoEntrevista.SelectedIndex = 0;
            chkMultiplosProfissionais.Checked = false;
            txtMaximoProfissionais.Text = string.Empty;
            txtMaximoProfissionais.Visible = false;
            lblMaximoProfissionais.Visible = false;

            lsvEvento.DataSource = Eventos;
            lsvEvento.DataBind();

            WebHelper.ShowMessageBox("Fase incluída com sucesso!", ref updVaga);

            ddlTipoEvento.Focus();
        }

        protected void lsvConsultoria_ItemDataBound(object sender, ListViewItemEventArgs e)
        {
            var item = (ListViewDataItem) e.Item;
            var empresaConsultoria = (EmpresaConsultoria) item.DataItem;

            var consultoria = (Label) item.FindControl("lblConsultoria");
            var site = (Label) item.FindControl("lblSite");
            var enviarVaga = (ImageButton) item.FindControl("chkEnviarVaga");

            consultoria.Text = empresaConsultoria.Empresa1.Usuario.Pessoa.PessoaJuridica.NomeFantasia;
            site.Text = empresaConsultoria.Empresa1.Usuario.Pessoa.Email;
        }

        protected void chkUsarConsultorias_CheckedChange(object sender, EventArgs e)
        {
            if (!chkUsarConsultorias.Checked) return;

            //lsvConsultoria.DataSource = new Domain.EmpresaConsultoria().SelecionarPorEmpresa(int.Parse(ddlEmpresa.SelectedValue));
            lsvConsultoria.DataBind();
        }
    }
}